#include <stdio.h>

// 尾递归
// 时间复杂度：O(n)
// 空间复杂度：O(n)
long factorial(int n, long res) {
    if (n <= 0) return 0;
    // 最小子问题
    if (n == 1) return res;
    return factorial(n - 1, n * res);
}

int main(void) {
    printf("%ld", factorial(6, 1));
    return 0;
}
